from PyQt5.QtWidgets import QFrame, QLabel, QTableWidget, QTableWidgetItem, QPushButton, QMessageBox
from PyQt5.QtGui import QFont, QPixmap, QImage, QPainter, QFontMetrics
from PyQt5.QtCore import Qt, pyqtSignal


class OperationFrame(QFrame):
    # 定义信号
    display_image = pyqtSignal(str)
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setStyleSheet("background-color: white; border: 2px solid white;")
        self.setFixedSize(1000, 140)
        self.setGeometry(480, 780, 1000, 140)

        self.set_title()  # 添加标题
        self.init_table()  # 初始化表格
        self.selected_image_path = None  # 初始化成员变量来存储选中的图片路径

        # 在初始化函数中连接点击事件
        self.table.cellClicked.connect(self.on_row_click)

    def set_textbox_style(self, line_edit):
        # 设置文本框的背景颜色、边框和圆角
        line_edit.setStyleSheet("""
               background-color: #f0f0f0;  /* 背景颜色 */
               border: 2px solid #ccc;     /* 边框颜色 */
               border-radius: 5px;         /* 圆角效果 */
               padding: 5px;               /* 内边距 */
               color: red;                 /* 设置字体颜色为红色 */
           """)
        # 设置字体大小
        font = line_edit.font()
        font.setPointSize(12)  # 设置字体大小为12
        line_edit.setFont(font)

        # 设置文本居中
        line_edit.setAlignment(Qt.AlignCenter)  # 使文本内容居中

    def set_title(self):
        title = QLabel("检测结果", self)  # 设置标题文字
        title.setFont(QFont("仿宋", 18))  # 设置字体为仿宋，大小为16
        # title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)  # 让文字居中
        title.setGeometry(20, 45, 200, 50)  # 设置位置，0为X轴，10为顶部间距，宽度为窗口宽度，高度为30
        title.setStyleSheet("color: black;  font-weight: bold;")  # 设置字体颜色为黑色

    def init_table(self):
        """初始化表格组件"""
        # 创建表格，设置列数和列名
        self.table = QTableWidget(self)
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(["序号", "结果保存路径"])
        self.table.setGeometry(200, 10, 760, 120)  # 设置表格位置和大小
        self.table.setEditTriggers(QTableWidget.NoEditTriggers)  # 禁止编辑表格内容
        self.table.setSelectionBehavior(QTableWidget.SelectRows)  # 设置表格行选择模式

        # 隐藏表格的行号列
        self.table.verticalHeader().setVisible(False)  # 隐藏左侧的行号

        # 设置列标题的字体和字体大小
        header = self.table.horizontalHeader()
        font = QFont("仿宋", 14)  # 设置列标题的字体和大小
        font.setBold(True)  # 将字体设置为加粗
        header.setFont(font)  # 应用字体设置到表格的列标题
        header.setStyleSheet("color: red;")  # 设置标题字体颜色为蓝色

        # 调整列宽
        self.table.setColumnWidth(0, 120)  # 设置“概率”列宽为120
        self.table.setColumnWidth(1, 600)  # 设置“图片路径”列宽为180

        # 设置表格样式，比如行的背景色，边框颜色等
        self.table.setStyleSheet("""
                   QTableWidget {
                       border: 2px solid #ccc;  /* 设置表格边框 */
                       gridline-color: #aaa;    /* 网格线颜色 */
                   }
                   QTableWidget::item {
                       padding: 5px;  /* 设置表格项的内边距 */
                   }
                   QTableWidget::item:selected {
                       background-color: #e0e0e0;  /* 设置选中行的背景颜色 */
                   }

               """)

    def update_table(self, new_results):
        # 先清空表格内容
        self.table.setRowCount(0)
        """动态更新表格数据"""
        # 将新的分类结果插入表格
        for result in new_results:
            row_position = self.table.rowCount()  # 获取当前表格的行数
            self.table.insertRow(row_position)  # 插入新行

            # 在每一行插入数据
            # 序号列
            item = QTableWidgetItem(str(row_position + 1))  # 序号
            item.setTextAlignment(Qt.AlignCenter)  # 设置居中对齐
            self.table.setItem(row_position, 0, item)

            # 图片路径列
            item = QTableWidgetItem(result["路径"])
            # item.setTextAlignment(Qt.AlignCenter)  # 设置居中对齐
            self.table.setItem(row_position, 1, item)

    # 假设这个方法是用于处理新的检测结果
    def new_detection_result(self, results):
        """接收到多个新的检测结果时更新表格"""
        # # 假设 results 是一个包含多个字典的列表，每个字典包含一个检测结果
        # for result in results:
        #     # 将每个结果插入表格
        self.update_table(results)
        # 可选：弹出提示框告知更新完成
        # QMessageBox.information(self, "更新完成", "推理已完成！")


    def on_row_click(self, row, column):
        """当表格中的某一行被点击时，获取该行的数据"""
        # 获取点击行的数据
        self.selected_image_path = self.table.item(row, 1).text()  # 获取图片路径

        # 打印或者处理你想做的操作
        print(f"点击的行信息：图片路径={self.selected_image_path},")

        # 发出信号或调用方法显示图片
        self.display_image.emit(self.selected_image_path)